package com.zzl.bonds.ticket.service.common;

import com.zzl.bonds.ticket.dto.feign.BathMsgDto;
import com.zzl.general.common.exception.SysException;
import com.zzl.general.common.serurity.entity.User;

import java.util.List;

/**
 * 发送消息
 *
 * @author gull
 * @date 2021-12-03 13:32:10
 */
@SuppressWarnings("unused")
public interface SendMsgService {
    /**
     * 批量发送 mq 消息:发送同一个消息给多人
     *
     * @param category    消息类别 如普通信息,操作信息
     * @param content     发送内容
     * @param receiverIds 接收人id，多个逗号拼接
     * @param user        当前登录用户
     * @param orgIds      组织架构id，不为空时，消息发送给这个组织架构下的所有的人
     * @throws SysException 业务异常
     */
    void sendMsgToMq(String category, String content, List<String> receiverIds, User user, List<String> orgIds) throws
            SysException;

    /**
     * 批量发送 mq 消息,发送不同消息给不同人
     *
     * @param bathMsgDtoList 消息发送实体
     * @throws SysException 业务异常
     */
    void sendBathMsgToMq(List<BathMsgDto> bathMsgDtoList) throws SysException;


    /**
     * 发送 mq 消息
     *
     * @param category   消息类别 如普通信息,操作信息
     * @param content    发送内容
     * @param receiverId 接收人id
     * @param user       当前登录用户
     * @throws SysException 业务异常
     */
    void singleSendMsgToMq(String category, String content, String receiverId, User user) throws
            SysException;

    /**
     * 给申请人发站内信
     *
     * @param id        开立id
     * @param creatorId 申请人id
     * @throws SysException 业务异常
     */
    void sendMsgToApplicant(String id, String creatorId, String type, String msg, User user) throws SysException;

    /**
     * 给所有审批人发消息
     *
     * @param id             申请id
     * @param receiveUserIds 审批人id集合
     * @param type           类型
     * @param msg            消息
     * @param user           发送人
     * @throws SysException 业务异常
     */
    void sendMsgToAllReviewer(String id, List<String> receiveUserIds, String type, String msg, User user) throws SysException;

    /**
     * 给所有公司部门人员发消息
     *
     * @param id     申请id
     * @param orgIds 审批人id集合
     * @param type   类型
     * @param msg    消息
     * @param user   发送人
     * @throws SysException 业务异常
     */
    void sendMsgToAllPerson(String id, List<String> orgIds, String type, String msg, User user) throws SysException;

    /**
     * 给所有通知人发消息
     * 1、开立签收，给开立申请人和审核人员发消息
     *
     * @param id             开立id
     * @param receiveUserIds 接收人
     * @throws SysException 业务异常
     */
    void sendMsgToAllNotifier(String id, List<String> receiveUserIds, String type, String msg, User user, List<String> orgIds) throws SysException;

    /**
     * 给所有通知人发消息
     * 1、开立签收，给开立申请人和审核人员发消息
     *
     * @param id             开立id
     * @param receiveUserIds 接收人
     * @throws SysException 业务异常
     */
    void sendMsgToAllNotifierWithBtnName(String id, List<String> receiveUserIds, String type,
                                         String msg, User user, List<String> orgIds, String btnName) throws SysException;

}
